package br.com.Bolao.application.controller;

import br.com.Bolao.application.dao.usuarios.UsuarioDAO;
import br.com.Bolao.application.util.CriptografiaSHA;
import br.com.Bolao.model.Usuario;
import java.io.Serializable;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.security.Identity;

/**
 *
 * @author Frederico Mucceli
 */
@AutoCreate
@Scope(ScopeType.CONVERSATION)
@Name("authenticator")
public class AuthenticationController extends BaseController implements Serializable {

    @In
    private Identity identity;
    @In
    private UsuarioDAO usuarioDAO;
    public static String dataAtual;

    /**
     * Método de verifica o usuário está logado no sistema para
     * renderização de componetes na tela.
     * @param usuarioEstaLogado
     * @return Boolean true caso esteja logado e false caso não esteja
     */
    public Boolean renderComponent(Boolean usuarioEstaLogado) {

        if (usuarioEstaLogado) {
            String nomeUsuario = identity.getCredentials().getUsername();
            Usuario usuarioLogado = usuarioDAO.obterPorUsuario(nomeUsuario);
            if (usuarioLogado.getAcesso() == 1) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    /**
     * Método para autenticação de usuários no sistema.
     * @return True caso a autenticação ocorra com sucesso, false caso contrário
     */
    public boolean authenticate() {
        String nomeUsuario = identity.getCredentials().getUsername();
        String senhaUsuario = identity.getCredentials().getPassword();

        String senhaCriptografada = CriptografiaSHA.criptografar(senhaUsuario);
        Usuario usuarioLogado = usuarioDAO.obterUsuario(nomeUsuario, senhaCriptografada);

        if (usuarioLogado != null) {
            if (usuarioLogado.isEmailConfirmado()) {
                return true;
            }else{
                adicionarMensagemErro("Usuário não confirmou o cadastro pelo e-mail enviado");
                return false;
            }
        } else {
            return false;
        }
    }

    /**
     * Método para logar logo após cadastro de usuário
     * @param paramLogin
     * @param paramSenha
     */
    public void authenticate(String paramLogin, String paramSenha) {
        identity.setUsername(paramLogin);
        String senhaCriptografada = CriptografiaSHA.criptografar(paramSenha);
        identity.setPassword(senhaCriptografada);
        identity.login();
    }

    /**
     * GETs e SETs
     */
    public String getDataAtual() {
        return dataAtual;
    }

    public void setDataAtual(String dataAtual) {
        this.dataAtual = dataAtual;
    }

    public Identity getIdentity() {
        return identity;
    }

    public void setIdentity(Identity identity) {
        this.identity = identity;
    }
}
